package com.smzd.ccms.domain;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.smzd.ccms.core.CompletPlugin;
import com.smzd.core.domain.BaseIntIdEntity;
import com.smzd.framework.annotation.ModuleGroup;

@ModuleGroup(value = "ccms/admin", moduleNames = "complets", moduleName = "complet")
public class Complet extends BaseIntIdEntity {
	private static final long serialVersionUID = -4753525221848397119L;
	// className
	private String className;
	// executer
	private CompletPlugin executer;
	/**
	 * 默认参数值的配置。
	 * 
	 * 默认参数值都是配置在数据库中的，是兜底的。数据来源遵照重新的配置。<br>
	 * 如果没有重新配置，则数据来源一律按照：Tag参数、Request参数、默认值进行处理。<br>
	 * 重新配置过的参数会指定参数来源，根据参数来源进行数据获取。<br>
	 * 如果数据来源为默认次序，则根据Tag参数、Request参数、新默认值进行处理。
	 * 参数来源包括：0-默认次序、1-配置值、2-只Request、3-只Tag。<br>
	 * 指定2或3的，如果获取不到数据则直接从新配置的默认值取值，即1。
	 */
	private Map<String, CompletParam> params;

	public Map<String, CompletParam> getParams() {
		return params;
	}

	public void putParams(List<CompletParam> params) {
		for (CompletParam param : params) {
			putParam(param);
		}
	}

	public void putParam(CompletParam param) {
		if (params == null) {
			params = new HashMap<String, CompletParam>();
		}
		params.put(param.getKey(), param);
	}

	/**
	 * 获取className
	 * 
	 * @return
	 */
	public String getClassName() {
		return className;
	}

	/**
	 * 设置className
	 * 
	 * @param className
	 */
	public void setClassName(String className) {
		this.className = className;
	}

	public CompletPlugin getExecuter() {
		return executer;
	}

	public void setExecuter(CompletPlugin executer) {
		this.executer = executer;
	}

	public CompletParam getCompletParam(String key) {
		return params == null ? null : params.get(key);
	}

	@SuppressWarnings("unchecked")
	public <T> T getDefaultParamValue(String key) {
		CompletParam cp = getCompletParam(key);
		if (cp != null) {
			return (T) cp.varValue();
		}
		return null;
	}
}